﻿using System;
using System.ComponentModel.DataAnnotations;
using SERVICES;
using SERVICES.Services;
using WMILK_MVC4.Helper;

namespace WMILK_MVC4.Models
{
    // Model use for Login.
    public class UserModels
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "Yêu cầu nhập tên đăng nhập hoặc email của bạn.")]
        [Display(Name = "Tên đăng nhập/Email ")]
        public string UserName { get; set; }
        public string Email { get; set; }
        [Required(ErrorMessage = "Yêu cầu nhập mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Display(Name = "Mật khẩu")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        public bool RememberMe { get; set; }

        public string FullName { get; set; }

        public bool IsValid(string userName, string password)
        {
            string ecryptPassword = UserHepler.EncryptPassword(password);
            return UserServices.Authenticate(userName, ecryptPassword);
        }
        
        public bool IsActive(string userName)
        {
            return UserServices.IsAccountActive(userName);
        }

        public int Role { get; set; }
        public string RoleName { get; set; }
    }

    public class ResendCodeUserModel
    {
        [Required(ErrorMessage = "Vui lòng nhập Email.")]
        [Display(Name = "Email")]
        [EmailAddress(ErrorMessage = "Email không hợp lệ ")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập tên đăng nhập.")]
        [Display(Name = "Tên đăng nhập")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập Họ và tên.")]
        [Display(Name = "Họ và tên ")]
        public string FullName { get; set; }

        [Required]
        [Display(Name = "Trả lời câu hỏi:")]
        public string Captcha { get; set; }

        public Guid Activation { get; set; }

        public void GetUserByMail()
        {
            var user = UserServices.GetUser(Email);
            UserName = user.US_NAME;
            Activation = user.US_ACTIVATION ?? new Guid();
            FullName = user.US_USERNAME;
        }
    }

    //Model use for Register
    public class RegisterUserModels
    {
      
        public RegisterUserModels()
        {
            ErrorString = "";
        }
        [Display(Name = "")]
        public string ErrorString { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập tên đăng nhập.")]
        [Display(Name = "Tên đăng nhập")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập Họ và tên.")]
        [Display(Name = "Họ và tên ")]
        public string FullName { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập Email.")]
        [Display(Name="Email")]
        [EmailAddress(ErrorMessage = "Email không hợp lệ ")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Display(Name = "Mật khẩu")]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        
        [Display(Name = "Xác nhận mật khẩu")]
        [Required(ErrorMessage = "Vui lòng nhập xác nhận mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Compare("Password", ErrorMessage = "Xác nhận mật khẩu không khớp ")]
        [DataType(DataType.Password)]
        public string ComfirmPassword { get; set; }
        
        [Display (Name = "Giới tính ")]
        public string Gender { get; set; }

        [Display(Name = "Ngày sinh ")]
        public DateTime DayOfBirth { get; set; }

        [Display (Name = "Số điện thoại ")]
        public int Telephone { get; set; }

        [Display (Name ="Địa chỉ ")]
        public string Address { get; set; }

        [Display (Name = "Tài khoản Yahoo")]
        public string YahooAccount { get; set; }

        [Display(Name = "Tài khoản Skype")]
        public string SkypeAccount { get; set; }

        [Required]
        [Display(Name = "Trả lời câu hỏi:")]
        public string Captcha { get; set; } 

        public Guid Activation { get; set; }
        public bool Register()
        {
            if (!string.IsNullOrEmpty(FullName)&& !string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password) && !string.IsNullOrEmpty(ComfirmPassword)&& !string.IsNullOrEmpty(Email))
            {
                if (ComfirmPassword.Equals(Password))
                {
                    string ecryptPassword = UserHepler.EncryptPassword(ComfirmPassword);
                    if (!UserServices.Register(UserName, FullName, Email, ecryptPassword, Gender, DayOfBirth, Telephone, Address, YahooAccount, SkypeAccount, Activation))
                    {
                        ErrorString = "Tên đăng nhập đã tồn tại";
                        return false;
                    }
                }
            }
            return true;
        }

        public bool ConfirmRegister(string userName, Guid activation)
        {
            if (UserServices.ConfirmRegister(userName, activation))
            {
                return true;
            }
            return false;
        }
    }

    public class ChangePasswordUserModel
    {
        [Display(Name = "Tên đăng nhập ")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Display(Name = "Mật khẩu hiện tại ")]
        [DataType(DataType.Password)]
        public string OldPassword { get; set; }

        [Required(ErrorMessage = "Vui lòng nhập mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Display(Name = "Mật khẩu mới")]
        [DataType(DataType.Password)]
        public string NewPassword { get; set; }


        [Display(Name = "Xác nhận mật khẩu mới")]
        [Required(ErrorMessage = "Vui lòng nhập xác nhận mật khẩu.")]
        [StringLength(100, ErrorMessage = "{0} phải ý nhất {2} ký tự.", MinimumLength = 6)]
        [Compare("NewPassword", ErrorMessage = "Xác nhận mật khẩu không khớp ")]
        [DataType(DataType.Password)]
        public string ComfirmNewPassword { get; set; }

        public bool ChangePassword()
        {
            string ecryptOldPassword = UserHepler.EncryptPassword(OldPassword);
            string ecryptNewPassword = UserHepler.EncryptPassword(ComfirmNewPassword);
            return UserServices.ChangePassword(UserName, ecryptOldPassword, ecryptNewPassword);
        }
    }

    public class ForgotPasswordUserModel
    {
        [Required(ErrorMessage = "Vui lòng nhập vào email của bạn.")]
        [Display(Name = "Email")]
        [EmailAddress (ErrorMessage = "Email bạn nhập vào không đúng")]
        public string Email { get; set; }

        [Required]
        [Display(Name = "Trả lời câu hỏi:")]
        public string Captcha { get; set; } 

        public string GetForgotPassword()
        {
            return UserHepler.DecryptPassword(UserServices.GetForgotPassword(Email));
        }

    }
}
